package com.guqiao.library.utils;

import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.disposables.Disposable;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;


/**
 * @author jiangyao
 * @date 2019-06-10 15:30
 * @desc Rx任务管理器
 */

public class DisposableManager {

    public static final String TAG = DisposableManager.class.getSimpleName();
    private Map<String, CompositeDisposable> disposableMap;

    public DisposableManager() {
        disposableMap = new ConcurrentHashMap();
    }


    public void add(String tag, Disposable disposable) {
        CompositeDisposable mDisposable = disposableMap.get(tag);
        if (mDisposable == null) {
            mDisposable = new CompositeDisposable();
        } else {
            //如果上次请求没有结束，则结束上次请求
            remove(tag);
        }
        disposableMap.put(tag, mDisposable);
        mDisposable.add(disposable);
    }

    public void remove(String tag) {
        CompositeDisposable mDisposable = disposableMap.get(tag);
        if (mDisposable != null && !mDisposable.isDisposed()) {
            mDisposable.dispose();
        }
    }

    public void clear() {
        for (Map.Entry<String, CompositeDisposable> entry : disposableMap.entrySet()) {
            CompositeDisposable compositeDisposable = entry.getValue();
            if (compositeDisposable != null && !compositeDisposable.isDisposed()) {
                compositeDisposable.dispose();
            }
        }
        disposableMap.clear();
    }
}
